565265de84266373c16f8480fd0b6622d789a8a1,src/freenet/store/BerkeleyDBFreenetStore.java,BerkeleyDBFreenetStore,overwriteKeyUnchanged,#StorableBlock#number[]#number[]#number[]#number[]#,1371
Before Change
StoreBlock storeBlock = (StoreBlock) storeBlockTupleBinding.entryToObject(blockDBE);
synchronized(storeRAF) {
storeRAF.seek(storeBlock.offset*(long)(dataBlockSize+headerBlockSize));
storeRAF.write(header);
storeRAF.write(data);
if(keysRAF != null) {
keysRAF.seek(storeBlock.offset * keyLength);
keysRAF.write(fullKey);
}
}
After Change
/**
* Overwrite a block with a new block which has the same key.
*/
private boolean overwriteKeyUnchanged(StorableBlock block, byte[] routingkey, byte[] fullKey, byte[] data, byte[] header) throws IOException {
synchronized(this) {
if(closed)
return false;
}
DatabaseEntry routingkeyDBE = new DatabaseEntry(routingkey);
DatabaseEntry blockDBE = new DatabaseEntry();
Cursor c = null;
Transaction t = null;
try {
t = environment.beginTransaction(null,null);
c = keysDB.openCursor(t,null);
// Lock the record.
if(c.getSearchKey(routingkeyDBE,blockDBE,LockMode.RMW)
!=OperationStatus.SUCCESS) {
c.close();
c = null;
t.abort();
t = null;
return false;
}
StoreBlock storeBlock = (StoreBlock) storeBlockTupleBinding.entryToObject(blockDBE);
fcWriteStore(storeBlock.offset, header, data);
if (keysRAF != null) {
fcWriteKey(storeBlock.offset, fullKey);
}
// Unlock record.